
package org.ns.summer.beans;

import org.ns.summer.beans.definition.BeanDefinition;
import org.ns.summer.beans.error.BeansException;

/**
 * 配置 Bean
 */
public interface ConfigurableBeanFactory extends BeanFactory, BeanDefinitionRegistry {

	String SCOPE_SINGLETON = "singleton";


	String SCOPE_PROTOTYPE = "prototype";


	// void setParentBeanFactory(BeanFactory parentBeanFactory);

	void setBeanClassLoader(ClassLoader beanClassLoader);

    ClassLoader getBeanClassLoader();


	void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);


	int getBeanPostProcessorCount();

	Object initializeBean(Object existingBean, String beanName) throws BeansException;

	String[] getBeanNamesForType(Class<?> beanType);

	void preInstantiateSingletons() throws BeansException;

	boolean containsSingleton(String beanName);

	BeanDefinition getBeanDefinition(String beanName);

}
